Programmable logic devices (PLDs), such as Field Programmable Gate Arrays (FPGAs), are generally used as building blocks in creating electronic circuit designs. A programmable logic device is a hardware component whose functionality can be configured.
A logic design is an abstract description of functionality that, when implemented in hardware, performs a predetermined function. Example logic designs include digital filters and multipliers. A logic design has input and output signals that can be connected to other logic designs.
Implementing a logic design on a PLD takes the steps of synthesis, placement and routing. As in the case of ASICs (Application Specific Integrated Circuits. i.e., fixed hardware) the implementation on a PLD can be performed entirely at design time, i.e., before the component is used. However, due to the inherent reconfigurability of static RAM-based FPGAs, this implementation can also be performed on the fly. This technique is called run-time hardware generation. However, conventional implementation tools are computationally very expensive which leads to a large implementation time and makes run-time hardware generation useless for most applications.
However, in many applications, subsequent data manipulations only differ in a small set of parameter values. For each set of parameter values, an optimized implementation can be generated that is smaller and/or faster than a general implementation that captures all parameter values at once. The overhead involved in generating optimized configurations on the fly with conventional tools is very big.